package com.itheima.sh.clients;

import com.itheima.sh.clients.fallback.UserFeignApiFallBack;
import com.itheima.sh.pojo.User;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;

/**
 * @Description:
 * @Version: V1.0
 * 服务消费者（用户模块）    服务提供方（订单模块）
 * 用户需要调用订单模块接口   根据用户名查询订单列表 findOrderByName()
 * 1、服务提供方（订单模块）
 *    - service_api 加入openFeign依赖
 *    - 编写服务接口方法findOrderByName，在接口上添加 @FeignClient("服务提供方服务名称")
 *
 * 2、服务消费者（用户模块）
 *    - 添加service_api依赖
 *    - 在引导类上添加 @EnableFeignClients(basepackages="FeignClient注解所在的包")
 *    - 直接在  @Autowired 接口即可
 *
 * Feign流程：
 *  1、在消费方引导类上 @EnableFeignClients  开启 FeignClient 扫描
 *  2、@FeignClient("user-service") 获取到 服务名称
 *  3、基于 Eureka 根据 服务名称获取 服务实例列表
 *  4、基于 Ribbon 负载均衡策略（轮询）从列表中获取一个具体的实例对象 Server
 *  5、从server获取IP和端口， http://ip:port
 *  6、基于Springmvc添加的注解将 请求地址 拼接完成 http://ip:port/"/user/{id}"
 *  7、完成远程HTTP调用即可
 *
 */
@FeignClient(value = "user-service", fallback = UserFeignApiFallBack.class)  // 注册到注册中心的提供方服务的名称
public interface UserFeignApi {

    @GetMapping("/user/{id}")  //****** controller 类上是否添加 RequestMapping
    public User queryById(@PathVariable("id") String username);
    //?username=kkk
    //public User queryById1(@RequestParam("username") String username);
}
